package com.baymax.study.redisson.infrastructure.locks.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 使用在类的方法上，禁止使用在接口或者抽象方法上
 **/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface GlobalLock {
    /**
     * 锁名 如果不填使用方法名
     */
    String name() default "";

    /**
     * 锁key 不填锁锁名 填锁锁名+key
     */
    String key() default "";

    long timeoutMillisecond() default 600000L;

    long waitTimeoutMillisecond() default 0L;

    boolean noParams() default false;

    /**
     * 是否为写锁 默认true
     */
    boolean isWrite() default true;
}
